# -*- coding: utf-8 -*-
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
#作者：cacho_37967865
#博客：https://blog.csdn.net/sinat_37967865
#文件：file_rename.py
#日期：2020-05-02
#备注： 批量对文件进行重命名、批量复制文件
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

import os
import shutil
from pycacho.cachobase.files_select import get_files,get_all_files
from pycacho.cachobase.file_deal import get_file,save_file


# 复制某个文件：sample-原始文件、new_path-新文件目录
def copy_file(sample,new_path):
    if not os.path.exists(new_path):
        os.makedirs(new_path)
    new_file = os.path.join(new_path, os.path.basename(sample))
    shutil.copy(sample, new_file)
    print('复制后的文件完整路径：',new_file)
    return new_file

# 复制某个文件并重命名：sample-原始文件、new_path-新文件目录、file_name-新文件名称
def copy_rename_file(sample,new_path,file_name):
    if not os.path.exists(new_path):
        os.makedirs(new_path)
    new_file = os.path.join(new_path, file_name)
    shutil.copy(sample, new_file)
    print('复制并重命名后的文件完整路径：',new_file)
    return new_file

# 复制某个文件生成多个重命名文件：sample-原始文件、new_path-新文件目录、num-生成数量
def copy_n_files(sample,new_path,num):
    if not os.path.exists(new_path):
        os.makedirs(new_path)
    for i in range(num):
        new_file = os.path.join(new_path, '%03d_'%(i) + os.path.basename(sample))
        shutil.copy(sample, new_file)
        print('复制并重命名后的文件完整路径：',new_file)

# 复制多个文件到其他目录：
def copy_files(file_path,file_type,new_path):
    if not os.path.exists(new_path):
        os.makedirs(new_path)
    files = get_files(file_path, file_type)
    for file in files:
        new_file = os.path.join(new_path, os.path.basename(file))
        shutil.copy(file, new_file)
        print('复制后的文件完整路径：', new_file)


# 复制多个文件（某个目录下）到其他目录并且重命名（文件顺序倒转）：file_path-->文件目录；
# file_type-->文件类型；new_path-->重命名后文件目录；out_name-->'image_%03d'-->image_000
def copy_rename_files(file_path,file_type,new_path,out_name):
    if not os.path.exists(new_path):
        os.makedirs(new_path)
    files = get_files(file_path, file_type)
    for i in range(len(files)):
        file = files[i]
        new_file = os.path.join(new_path, str(out_name%(len(files)-i)) +'.'+file_type)
        shutil.copy(file, new_file)
        print('复制并重命名后的文件完整路径：', new_file)

# 复制多个文件（某个目录以及子目录下）到其他目录并且重命名（文件顺序不变）
def rename_files(file_path, file_type, new_path,out_name):
    if not os.path.exists(new_path):
        os.makedirs(new_path)
    files = get_all_files(file_path, 'file', file_type)
    for i in range(len(files)):
        file = files[i]
        end_name = '.' + file_type
        new_file = os.path.join(new_path, out_name % (i) + end_name)
        byte_file = get_file(file)      # 二进制方式打开
        save_file(new_file, byte_file)  # 二进制方式存储
        print('重命名前的文件为：%s，重命名后文件为：%s' % (file, new_file))


# 复制多个文件到其他目录并且重命名：只针对数字名字，直接原来数字进行命名，比如1变成001
def rename_num_files(file_path, file_type, new_path):
    if not os.path.exists(new_path):
        os.makedirs(new_path)
    files = get_all_files(file_path, 'file',file_type)
    for file in files:
        print(file)
        end_name = '.'+file_type
        new_file = os.path.join(new_path, '%03d'% (int(os.path.basename(file).replace(end_name,''))) +end_name)
        shutil.copy(file, new_file)
        print('复制并重命名后的文件完整路径：', new_file)

if __name__ == '__main__':
    sample = 'E:\zenglingwei\\test\pic\\test.jpg'
    new_path = 'F:\image\\temp\\'
    file_path = 'F:\image\lkx\\01\image\\'      # 'F:\image\other\\校服\\'  'F:\image\baisui\\01'
    #copy_file(sample, new_path)
    #copy_rename_file(sample,new_path,'test-copy.jpg')
    #copy_n_files(sample, new_path,100)
    #rename_file('F:\image\other\\', 'jpg')
    #copy_files(file_path, 'jpg',new_path)
    #copy_rename_files(file_path, 'jpg', new_path,'image_%03d')
    #rename_num_files(file_path, 'jpg', new_path)
    rename_files(file_path, 'jpg',new_path, 'image_%03d')